//selef 当前的window
self.addEventListener('message', async (event) => {
    //获取主进程发过来的文件
    const file = event.data;
    //单独开一个进程来进行hash计算并得到新的文件名
    const fileName = await getFileName(file);
    //将文件名在发回主线程
    self.postMessage(fileName);
})
//将获取hash文件名的代码从文件FileUploader.jsx出移到单独的worker中
//根据文件对象获取文件内容得到的hash文件名
async function getFileName(file) {
    const fileHash = await calculateFileHash(file); // 计算文件的hash值
    const fileExtension = file.name.split('.').pop(); // 获取文件扩展名
    return `${fileHash}.${fileExtension}`; // 返回hash文件名
}

async function calculateFileHash(file) {
    const arrayBuffer = await file.arrayBuffer(); //    将文件转换为ArrayBuffer
    const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer)
    return bufferToex(hashBuffer); // 将hashBuffer转换为十六进制字符串
}

//将ArrayBuffer转换为十六进制字符串
function bufferToex(buffer) {
    return Array.from(new Uint8Array(buffer))
        .map(b => b.toString(16).padStart(2, '0')).join('');
}